package com.shujia.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo03Map {
  def main(args: Array[String]): Unit = {
    /**
     * 在Spark中可以将算子分为两类：
     * 1、transformation算子（转换算子）
     * 2、action算子（行为算子）
     * 最大的区别：返回值类型是否为RDD
     * 由RDD得到另一RDD则是转换算子
     * 由RDD得到其他类型则为行为算子
     *
     * Spark中的转换算子是懒执行，需要action算子触发执行
     *
     * 一个Action算子可以触发一个Job
     *
     */

    /**
     * map：对每一条数据进行处理，来一条会返回一条
     */

    val conf: SparkConf = new SparkConf()
    conf.setAppName("Demo03Map")
    conf.setMaster("local")

    val sc: SparkContext = new SparkContext(conf)

    val stuLineRDD: RDD[String] = sc.textFile("spark/data/students.txt")

    // 将每一条数据的id、name提取出来
    val idNameRDD: RDD[(String, String)] = stuLineRDD
      .map(line => {
        (line.split(",")(0), line.split(",")(1))
      })

    idNameRDD.foreach(println) // 需要使用action算子触发执行
    //    idNameRDD.foreach(println)// 需要使用action算子触发执行
    //    idNameRDD.foreach(println)// 需要使用action算子触发执行
    //    idNameRDD.foreach(println)// 需要使用action算子触发执行

    while (true) {

    }

  }

}
